`timescale 1us/1ns

module PIE_decoder_tb;
	
	reg Clk;
	reg Rst;
	reg Din;
	wire [7:0]Dout;
	wire D_en;
	wire F_en;
	
	parameter half_cycle = 1;
	initial begin
		Clk = 0;
		forever Clk = #half_cycle ~Clk;
	end
	
	initial begin
		Rst = 1;  Din = 1'b1;
		#(2*half_cycle) Rst = 0;
		#(2*half_cycle) Rst = 1;
		#(8*half_cycle) 
		#(2*half_cycle) Din = 1'b0;		//SOF
		#(24*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;	
		#(10*half_cycle) Din = 1'b1;	//01101001
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b0;	//EOF
		#(20*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(2*half_cycle) Din = 1'b0;		//SOF
		#(24*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;	
		#(10*half_cycle) Din = 1'b1;	//01101001
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
	#(10*half_cycle) Din = 1'b1;	   //11001001
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;	//11110000
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b0;	//EOF
		#(20*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(2*half_cycle) Din = 1'b0;		//SOF
		#(20*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;	//10000111
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;	//11001001
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;	//11110000
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;	//11101001
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;	//10001001
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;	//01110000
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(30*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b0;	//EOF
		#(20*half_cycle) Din = 1'b1;
		#(10*half_cycle) Din = 1'b0;
		#(10*half_cycle) Din = 1'b1;
		#(2*half_cycle) Din = 1'b0;		//SOF
		#(24*half_cycle) Din = 1'b1;
		#(200*half_cycle)
		$stop;
	end
	
	PIEDecoder uut(
		.Clk(Clk),
		.Rst(Rst),
		.Din(Din),
		.Dout(Dout),
		.D_en(D_en),
		.F_en(F_en)
	);

endmodule